//庆功会 采用二进制优化转化为01背包
#include <iostream>
using namespace std;
const int MAXN=500;
const int MAXM=6000;
int n,m;
int w[MAXN+1],c[MAXN+1],s[MAXN+1];//价格，价值，数量 
int maxc[MAXM+1];//maxc[v]拔款为v取得的最大价值

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>w[i]>>c[i]>>s[i];

    for(int i=1;i<=n;i++){ //将第i个物品拆解为价格是2^0*w[i]，2^1*w[i],...2^(k-1)*w[i],(s[i]-2^k+1)*w[i]的物品
        for(int k=0,p=1;p<=s[i];k++,p=1<<k){
            if (p*2>s[i]) p=s[i]-p+1;
            for(int v=m;v>=p*w[i];v--){
                    //maxc[v]=max(maxc[v],maxc[v-p*w[i]]+p*c[i]);
                    if (maxc[v-p*w[i]]+p*c[i]>maxc[v]) maxc[v]=maxc[v-p*w[i]]+p*c[i];
            }
        } 
    }
    cout<<maxc[m];
}